package wrap

import (
	"excel-handle/ent/yaml"
	"excel-handle/util"
	"github.com/xuri/excelize/v2"
	"log"
	"os"
	"path/filepath"
)

func GenerateExcel(prop yml.Prop, excelTemplatePath string, excelOutPath string) {

	// 处理默认路径
	excelTemplatePath = util.Or(excelTemplatePath, DefaultExcelTemplatePath)
	excelOutPath = util.Or(excelOutPath, DefaultOutputPath)

	// 文件句柄。打开实例。
	// os.File 类型正是实现了 io.Reader 接口
	bufReader := util.ToBufReader(excelTemplatePath)
	excel, err := excelize.OpenReader(bufReader)
	if err != nil {
		log.Println("读取excel模板出错")
		panic(err)
	}
	defer excel.Close()

	// 处理生成数据
	//throwRubbishItems, _ := prepareData()

	throwRubbishItems, onDutyCleanItems := PrepareData(prop)

	// 填充数据
	FillExcelData(excel, throwRubbishItems, onDutyCleanItems)

	// 打印excel数据
	util.PrintSheet(excel, Sheet1)
	//util.ApplyByStyleId(excel, "Sheet1", excelize.Style{})

	// 分离文件路径和文件名
	dir := filepath.Dir(excelOutPath)
	absDir, _ := filepath.Abs(dir)
	if _, err := os.Stat(absDir); os.IsNotExist(err) {
		// 如果目录不存在，创建它
		err := os.MkdirAll(dir, os.ModePerm)
		if err != nil {
			log.Printf("创建目录时出错：%v" + err.Error())
			panic(err)
		}
		log.Printf("已创建目录：%v", absDir)
	}

	// 保存文件
	absExcelOutPath, _ := filepath.Abs(excelOutPath)
	if err := excel.SaveAs(absExcelOutPath); err != nil {
		log.Fatal("保存文件时出错:", err)
	} else {
		log.Printf("保存文件成功: %v", absExcelOutPath)
	}

}
